#include "HStack.h"

#include<stdlib.h>


STACK_t *mthis ; 

STACK_t * GetStack(STACK_t * s) {
    mthis = s;
    return mthis ; 
}


/********************************************

 * 数据入栈操作
 * 参数1：入队数据
 * 返回值：操作成功返回 0 ，否则返回 正数
 ********************************************/
int HSTACK_Push(int data){
    if(mthis->top >= mthis->len-1) return 1;
    mthis->top++;
    mthis->buf[mthis->top] = data ; 
    mthis->full = (mthis->top >= mthis->len-1) ? 1 : 0;
    mthis->empty = 0 ;
    return 0;
}
/********************************************
 * Pop
 * 数据出栈操作
 * 返回值：出栈的数据
 ********************************************/
int HSTACK_Pop(void){
    int rt =0;
    if(mthis->top <0) return 0;
    rt = mthis->buf[mthis->top];
    mthis->top--;
    mthis->full = 0;
    mthis->empty = (mthis->top < 0) ? 1 : 0 ;
    return rt ;
}


void HSTACK_Clean() {
    free(mthis->buf) ;
}

/********************************************
 * mthisinit
 * 初始化 栈
 * 参数1： STACK_t 对象
 * 参数2：数据缓存buf
 * 返回值：操作成功返回 0 ，否则返回 正数
 ********************************************/
int HSTACK_Init(STACK_t *q, int bufSize){
    if( bufSize <= 0) return 1; 
    q->buf =  (int *)malloc((bufSize+1)*sizeof(int));
    q->top = -1 ;
    q->len = bufSize;
    q->full = 0;
    q->empty = 1;
    q->Push = HSTACK_Push;
    q->Pop = HSTACK_Pop ; 
    q->Clean = HSTACK_Clean;
    return 0;
}


